package aplicacion.modelo;

import java.awt.Point;


public class Pacman extends Personaje {
	final static private int CASILLEROSAMOVER=1;
	private SentidoDeMovimiento sentidoDeMovimiento;
	
	public Pacman(Point posicionInicial, int contadorGameloops, SentidoDeMovimiento sentido) {
		super(posicionInicial, contadorGameloops);
		sentidoDeMovimiento = sentido;
	}
	
	private void moverEnY(int valor){	
		Point posicion = (Point) getPosicion().clone();
		posicion.translate(0, valor);
		
		recorrerCelda(posicion);
	}

	private void moverEnX(int valor){
		Point posicion = (Point) getPosicion().clone();
		posicion.translate(valor, 0);
		
		recorrerCelda(posicion);
	}

	private void recorrerCelda(Point posicion) {
		Celda celda = Juego.getInstance().getTablero().getCelda(posicion);
		Point posicionAMover = celda.recorrer();
		if(posicionAMover != null)
			getPosicion().setLocation(posicionAMover);
	}
	
	
	
	public void moverDerecha(){
		moverEnX(CASILLEROSAMOVER);
	}
	
	public void moverIzquierda(){
		moverEnX(-CASILLEROSAMOVER);
	}
	
	public void moverArriba(){
		moverEnY(-CASILLEROSAMOVER);
	}
	
	public void moverAbajo(){
		moverEnY(CASILLEROSAMOVER);
	}
	
	public void morir(){
		estoyVivo=false;
		this.restarVidas();
	}

	@Override
	public void vivir() {
		if (estoyVivo) {
			if(getContadorGameloops() == 0)
			{
				sentidoDeMovimiento.mover(this);
				reiniciarGameloops();
			}
			else
				decrementarGameloops(1);
		}
	}

	public void cambiarSentidoIzquierda() {
		sentidoDeMovimiento = new MovimientoIzquierda();
	}

	public void cambiarSentidoDerecha() {
		sentidoDeMovimiento = new MovimientoDerecha();
	}

	public void cambiarSentidoArriba() {
		sentidoDeMovimiento = new MovimientoArriba();
	}
	
	public void cambiarSentidoAbajo() {
		sentidoDeMovimiento = new MovimientoAbajo();
	}

	public SentidoDeMovimiento getSentidoDeMovimiento() {
		return sentidoDeMovimiento;
	}
}
